package com.ocean.productDict.service.impl;

import com.ocean.productDict.domain.OZnwgSt;
import com.ocean.productDict.domain.bZt;
import com.ocean.productDict.domain.oNcfileMonitor;
import com.ocean.productDict.domain.oNctj;
import com.ocean.productDict.mapper.oNcfileMonitorMapper;
import com.ocean.productDict.service.oNcfileMonitorService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;

@Service
public class oNcfileMonitorServiceImpl implements oNcfileMonitorService {
    @Autowired
    private oNcfileMonitorMapper oNcfileMonitorMapper;
    /**
     * 查看总数
     * @return
     */
    @Override
    public Long getnumall() {
        List<oNcfileMonitor> nc = oNcfileMonitorMapper.selectnum();
        return (long)nc.size();//返回全部数据数量
    }
    /**
     * 根据条件查询数量
     * @return
     */
    @Override
    public Map<String,String> getnum(boolean time) {
        // 定义一个Map集合，用于存放不同台站的主键和数量
       Map<String,String> map = new HashMap<>();
        // 调用oNcfileMonitorMapper的selectnumtype方法，根据传入的time参数，查询出预报中心的台站数量
        List<oNcfileMonitor> ncyb = oNcfileMonitorMapper.selectnumtype("预报中心",time);
        // 调用oNcfileMonitorMapper的selectnumtype方法，根据传入的time参数，查询出浙江省台站的台站数量
        List<oNcfileMonitor> nczj = oNcfileMonitorMapper.selectnumtype("浙江省台",time);
        // 调用oNcfileMonitorMapper的selectnumtype方法，根据传入的time参数，查询出东海区台站的台站数量
        List<oNcfileMonitor> ncdh = oNcfileMonitorMapper.selectnumtype("东海区台",time);
        // 将不同台站的主键和数量存入Map集合中
        map.put("ncyb",String.valueOf(ncyb.size()));
        map.put("nczj",String.valueOf(nczj.size()));
        map.put("ncdh",String.valueOf(ncdh.size()));
        // 返回Map集合
        return map;
    }

    /**
     * 获取当天上传文件数据
     * @return
     */
    @Override
    public List<oNcfileMonitor> gettabledata() {
        return oNcfileMonitorMapper.gettabledata();
    }
    /**
     * 月文件统计数量
     * @return
     */
    @Override
    public Map ywjtjsl(String kstime, String jstime) {
       // 创建一个HashMap，用于存储统计数据
         Map map = new HashMap();
        // 调用oNcfileMonitorMapper的ywjtjsl方法，获取指定时间范围内的统计数据
        List<oNctj> tj = oNcfileMonitorMapper.ywjtjsl(kstime,jstime);
        // 创建两个LinkedList，用于存储日期和统计数据
        List<String> listt = new LinkedList();
        List<Integer> listw = new LinkedList();
        // 遍历统计数据
        for (oNctj oNctj : tj) {
        //  将日期和统计数据添加到LinkedList中
            listt.add(oNctj.getDay());
            listw.add(oNctj.getCount());
        }
        // 将日期和统计数据添加到HashMap中
        map.put("datatop",listt);
        map.put("datahead",listw);

        // 返回HashMap
        return map;
    }

    /**
     * 产品介绍L类别查询
     * @param type
     * @return
     */
    @Override
    public List<oNcfileMonitor> gettype(String type) {
        return oNcfileMonitorMapper.gettype(type);
    }

    /**
     * 判断时间是否上传数据
     * @param time
     * @return
     */
    @Override
    public Map getYandN(String kstime,String jstime) {
        // 创建一个HashMap，用于存储统计数据
        Map map = new HashMap();
        // 调用oNcfileMonitorMapper，获取指定时间范围内的统计数据
        List<oNcfileMonitor> getgjtime = oNcfileMonitorMapper.getgjtime(kstime,jstime,null);//国家级
        List<oNcfileMonitor> L0 = oNcfileMonitorMapper.getgjtime(kstime,jstime,"L0");
        List<oNcfileMonitor> L1 = oNcfileMonitorMapper.getgjtime(kstime,jstime,"L1");
        List<oNcfileMonitor> L2 = oNcfileMonitorMapper.getgjtime(kstime,jstime,"L2");
        List<oNcfileMonitor> L3 = oNcfileMonitorMapper.getgjtime(kstime,jstime,"L3");
        List<oNcfileMonitor> L4 = oNcfileMonitorMapper.getgjtime(kstime,jstime,"L4");
        List<oNcfileMonitor> L5 = oNcfileMonitorMapper.getgjtime(kstime,jstime,"L5");
        if(getgjtime.size()>0){
            map.put("gjj",true);//国家级
        }else{
            map.put("gjj",false);//国家级
        }
        if(L0.size()>0 || L4.size()>0 || L5.size()>0){
            map.put("ybzx",true);//预报中心
        }else {
            map.put("ybzx",false);//预报中心
        }
        if(L1.size()>0){
            map.put("zjst",true);//浙江省台
        }else {
            map.put("zjst",false);//浙江省台
        }
        if(L2.size()>0 || L3.size()>0){
            map.put("dhtq",true);//东海台区
        }else {
            map.put("dhtq",false);//东海台区
        }
        if(L0.size()>0){
            map.put("L0",true);//L0
        }else {
            map.put("L0",false);//L0
        }
        if(L1.size()>0){
            map.put("L1",true);//L1
        }else {
            map.put("L1",false);//L1
        }
        if(L2.size()>0){
            map.put("L2",true);//L2
        }else {
            map.put("L2",false);//L2
        }
        if(L3.size()>0){
            map.put("L3",true);//L3
        }else {
            map.put("L3",false);//L3
        }
        if(L4.size()>0){
            map.put("L4",true);//L4
        }else {
            map.put("L4",false);//L4
        }
        if(L5.size()>0){
            map.put("L5",true);//L5
        }else {
            map.put("L5",false);//L5
        }
        return map;
    }

    @Override
    public oNcfileMonitor getisName(String name) {
        return oNcfileMonitorMapper.getisName(name);
    }

    @Override
    public int addncfile(oNcfileMonitor nc) {
        return oNcfileMonitorMapper.instdata(nc);
    }

    /**
     * 去查询省台
     * @param s
     * @return
     */
    @Override
    public OZnwgSt getst(String s,String jb) {
        return oNcfileMonitorMapper.getst(s,jb);
    }

    @Override
    public OZnwgSt getys(String s) {
        return oNcfileMonitorMapper.getys(s);
    }

    @Override
    public List<oNcfileMonitor> selectdata(oNcfileMonitor oNcfileMonitor) {
        return oNcfileMonitorMapper.selectdata(oNcfileMonitor);
    }

    @Override
    public List<OZnwgSt> gettq(OZnwgSt oZnwgSt) {
        return oNcfileMonitorMapper.gettq(oZnwgSt);
    }

    @Override
    public List<oNcfileMonitor> getfilesize() {
        return oNcfileMonitorMapper.getfilesize();
    }

    @Override
    public List<OZnwgSt> getfilesizedt() {
        return oNcfileMonitorMapper.getfilesizedt();
    }

    @Override
    public List<String> getDtdata() {
        return oNcfileMonitorMapper.getDtdata();
    }

    @Override
    public List<oNcfileMonitor> getDtdatasj() {
        return oNcfileMonitorMapper.getDtdatasj();
    }

    @Override
    public List<oNcfileMonitor> getfilesizedtsl() {
        return oNcfileMonitorMapper.getfilesizedtsl();
    }

    @Override
    public List<oNcfileMonitor> getfilesizedn() {
        return oNcfileMonitorMapper.getfilesizedn();
    }

    @Override
    public Map get7data() {
        LocalDate[] localDates = get7datalist();//获取七天的时间数组
        Map map = new LinkedHashMap();
        String[] rp = new String[7];
        String[] gs = new String[7];
        for (int i = 0; i < localDates.length; i++) {
            List<oNcfileMonitor> list = oNcfileMonitorMapper.gettimedata(localDates[i]);
            rp[i] = localDates[i].toString();
            gs[i] = String.valueOf(list.size());
        }
        map.put("rp",rp);
        map.put("gs",gs);
        return map;
    }

    @Override
    public List<bZt> getdtdata() {
        List<bZt> map = oNcfileMonitorMapper.getdtdata();
        return map;
    }

    @Override
    public List<oNcfileMonitor> gettypedata(oNcfileMonitor oNcfileMonitor) {
        return oNcfileMonitorMapper.selectdatasj(oNcfileMonitor);
    }

    @Override
    public int upzt(Integer id) {
        return oNcfileMonitorMapper.upzt(id);
    }

    @Override
    public int upztks(Integer id) {
        return oNcfileMonitorMapper.upztks(id);
    }

    @Override
    public int upztsb(Integer id) {
        return oNcfileMonitorMapper.upztsb(id);
    }

    @Override
    public oNcfileMonitor getName(String s) {
        return oNcfileMonitorMapper.getName(s);
    }

    @Override
    public int upztName(String s,int zt) {
        return oNcfileMonitorMapper.upztName(s,zt);
    }

    public LocalDate[] get7datalist(){
        LocalDate today = LocalDate.now();
        // 定义一个数组来存储日期
        LocalDate[] dateArray = new LocalDate[7]; // 包括当天，所以需要8个位置
        // 填充数组，从当天开始往前数七天
        for (int i = 0; i < 7; i++) {
            dateArray[i] = today.minusDays(i);
        }
        // 定义一个日期格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        return dateArray;
    }
}
